//
//  SinaHomeTableViewController.swift
//  SinaWeiBo
//
//  Created by 王忠楠 on 16/9/19.
//  Copyright © 2016年 wangzn. All rights reserved.
//

import UIKit
import YYModel
//重用标记
private let  SinaHomeTableViewCellID = "cellID"

class SinaHomeTableViewController: SinaVisitorViewController {

    
    //  MARK: --    懒加载
    //  记录数据源
    //lazy var statusList: [HMStatus] = [HMStatus]()
    
    //  使用对应的ViewModel对象
    fileprivate lazy var statusListViewModel: SinaStatusListViewModel = SinaStatusListViewModel()
    
    //  上拉加载
    fileprivate lazy var pullUpView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        view.color = UIColor.red
        return view
        
    }()
    
    fileprivate lazy var pullDownView: UIRefreshControl = {
        let view = UIRefreshControl()
        //  添加下拉刷新事件
        view.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
        return view
        
    }()
    
    //  自定义下拉刷新控件
    fileprivate lazy var pullDownCtr: SinaRefreshControl = {
        let view = SinaRefreshControl()
        view.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
        return view
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLogin {
            visitorView?.updateVisitorInfo(message: nil, imageName: nil)
        } else {
            setupTableView()
            //  表示登录, 加载微博数据
            loadData()
            
        }
    }
    
    
    
    
    //  设置UITableView的相关操作
    private func setupTableView() {
        //  UITableViewCell.self 表示获取 Class
        tableView.register(SinaHomeTableViewCell.self, forCellReuseIdentifier: SinaHomeTableViewCellID)
        //  设置行高-> 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //  预估行高
        tableView.estimatedRowHeight = 200
        //  去掉分割线
        tableView.separatorStyle = .none
        //  上拉加载视图
        tableView.tableFooterView = pullUpView
        
        //  下拉刷新视图
        
        //tableView.addSubview(pullDownView)
        
        //self.refreshControl = pullDownView
        
        //  添加自定义下拉刷新控件
        tableView.addSubview(pullDownCtr)
        
    }
    
    private func endRefreshing() {
        //  结束刷新
        pullUpView.stopAnimating()
        //  结束下拉刷新
        pullDownView.endRefreshing()
        
        
    }
    //  下拉刷新操作
    @objc private func pullDownRefreshing() {
        
        print("下拉刷新")
        
        
        loadData()
        
        
        
    }
    
    
    //  加载首页微博数据
    func loadData() {
        
        
        statusListViewModel.loadData(isPullup: pullUpView.isAnimating) { (isSuccess) in
            //  结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
        
        
  
        
    }
    
    
    
    
    
    
}

//  MARK: -- UITableViewDataSource
extension SinaHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: SinaHomeTableViewCellID, for: indexPath) as! SinaHomeTableViewCell
        //  获取cell对应的ViewModel
        let viewModel: SinaStatusViewModel = statusListViewModel.statusList[indexPath.row]
        //  绑定数据
        cell.statusViewModel = viewModel
        //  取消选中的颜色
        cell.selectionStyle = .none
        
        return cell
    }
    //  将要显示cell的时候判断是否是最后一个cell
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpView.isAnimating {
            pullUpView.startAnimating()
            print("已经滚动到最后一个cell了")
            
            
            loadData()
        }
        
        
        
    }
    
    
    
}



